/*题目描述
当两个比较大的整数相乘时，可能会出现数据溢出的情形。为避免溢出，可以采用字符串的方法来实现两个大数之间的乘法。具体来说，首先以字符串的形式输入两个整数，每个整数的长度不超过20位，然后把它们相乘的结果存储在另一个字符串当中（长度不会超过40位），最后把这个字符串打印出来。

例如，假设用户输入为：9999999999和1000000000，则输出结果为：9999999999000000000。

编写程序，在程序中实现函数 void multiply(char* s1, char* s2, char* result)，其中参数s1和s2为输入的两个数，result = s1 * s2。

样例输入
9999999999 1000000000
样例输出
9999999999000000000
*/
#include <iostream>
#include <string>
#include <cstring>
using namespace std;

void multiply(char *s1, char *s2, char *result)
{
    int len1 = strlen(s1);
    int len2 = strlen(s2);
    int len = len1 + len2;
    int *a = new int[len1];
    int *b = new int[len2];
    int *c = new int[len];
    memset(a, 0, sizeof(int) * len1);
    memset(b, 0, sizeof(int) * len2);
    memset(c, 0, sizeof(int) * len);
    for (int i = 0; i < len1; i++)
        a[i] = s1[len1 - i - 1] - '0';
    for (int i = 0; i < len2; i++)
        b[i] = s2[len2 - i - 1] - '0';
    for (int i = 0; i < len1; i++)
        for (int j = 0; j < len2; j++)
            c[i + j] += a[i] * b[j];
    for (int i = 0; i < len; i++)
    {
        c[i + 1] += c[i] / 10;
        c[i] %= 10;
    }
    int i = len - 1;
    while (c[i] == 0)
        i--;
    for (; i >= 0; i--)
        *result++ = c[i] + '0';
    *result = '\0';
    delete[] a;
    delete[] b;
    delete[] c;
}

int main()
{
    char s1[21], s2[21], result[41];
    cin >> s1 >> s2;
    multiply(s1, s2, result);
    cout << result << endl;
    return 0;
}
